package binary_search.leetcode_153_medium;

public class FindMin {
    public int findMin(int[] nums) {
        int left = 0;
        int right = nums.length - 1;
        while(left < right){
            int mid = left + (right - left) / 2;
            /*
                该题一定是和nums[right] 最右元素比较，因为数组可能存在未发生旋转的情况
                    例如：[1,2,3,4,5] 和 [2,3,4,5,1]
                    这两个例子的最小值分列左右，若与nums[left]比较，将无法确定区间该如何收缩
             */
            if(nums[mid] > nums[right]){
                //最小值一定在右半边
                left = mid + 1;
            }else{
                //mid可能是最小值
                right = mid;
            }
        }
        //一定存在最小值，不需要额外判断
        return nums[left];
    }
}
